parser grammar AnalizadorXMLParser;

options {
  language = Java;
  tokenVocab = AnalizadorXMLLexer;
}

@header {package PL.practica6;}

@members{

boolean flag = false;
ArrayList <RecognitionException> errores = new ArrayList<RecognitionException>();

public boolean listaVacia (){
    if (errores.isEmpty()){
      return true;
    }else
      return false;
}

public ArrayList getListaErrores(){return errores;}


@Override
public void reportError (RecognitionException e){
  System.out.println (getErrorMessage(e, getTokenNames()));
  errores.add(e);
}

}

entrada: etiquetabiblio;

etiquetabiblio : biblioini dentroetiqueta etiquetalib*  bibliofin;

etiquetalib : libini etiquetatit etiquetaaut etiquetaedit libfin;
etiquetatit : titini dentroetiqueta titfin;
etiquetaaut : autini dentroetiqueta autfin;
etiquetaedit : editini dentroetiqueta editfin;

dentroetiqueta : (PALABRA | SIMBOLOS)*;

  biblioini: {flag= true;} ABRIRANGULO  BIBLIO atributo CERRARANGULO {flag= false;};
  bibliofin: ANGULOSLASH BIBLIO  CERRARANGULO;
  libini: {flag = true;} ABRIRANGULO LIB  atributo?  CERRARANGULO {flag= false;};
  libfin: ANGULOSLASH LIB  CERRARANGULO;
  titini:{flag = true;} ABRIRANGULO TIT atributo? CERRARANGULO {flag= false;};
  titfin: ANGULOSLASH TIT  CERRARANGULO;
  autini: {flag = true;}ABRIRANGULO AUT atributo?  CERRARANGULO {flag= false;};
  autfin: ANGULOSLASH AUT  CERRARANGULO;
  editini:{flag = true;} ABRIRANGULO EDIT atributo?  CERRARANGULO {flag= false;};
  editfin: ANGULOSLASH EDIT CERRARANGULO;
  atributo : {flag}? PALABRA IGUAL VALOR;
